19. 合成数据(Synthetic Data)与模型对齐

随着大模型的发展,人工标注已经逐渐成为瓶颈。

例如:

GPT-4
Claude
DeepSeek-R1
Gemini

背后大量数据并非全部来自人工。

而是:

人工设计规则 + 大模型自动生成数据

这种方式通常称为:

Synthetic Data
合成数据

为什么需要合成数据

人工标注的问题:

问题 描述
成本高 专家标注非常昂贵
速度慢 数据增长有限
覆盖不足 难以覆盖长尾问题
质量不一致 不同标注员标准不同

因此工业界越来越多采用:

Human → AI → Human

的混合模式。


合成数据流水线

一个典型的数据生成流程:

flowchart LR

A[Prompt Template]

--> B[LLM生成数据]

--> C[数据过滤]

--> D[格式转换]

--> E[质量评分]

--> F[训练数据]

第一步:生成(Generation)

使用已有大模型生成:

Question
Answer
Reasoning
Tool Use
Code

等数据。


例如:

请生成10个高中数学问题及答案

模型输出:

Question
Answer

数据对。


自动生成流程

graph TD

A[Prompt Template]

--> B[LLM]

B --> C[Question]

B --> D[Answer]

B --> E[Think]

Template Engineering

实际生成时通常使用模板工程。

模板中可以控制:


例如:

领域:
数学

难度:
高中

风格:
逐步推导

生成:
100个问题

模板:

请生成{数量}个{领域}问题

要求:

难度:{难度}
风格:{风格}

输出:
Question
Think
Answer

第二步:过滤(Filtering)

生成的数据并不能直接训练。

因为:

Garbage In
Garbage Out

垃圾数据会直接降低模型质量。


因此需要过滤。


为什么过滤重要

例如生成:

Question:
1+1=?
Answer:
3

显然错误。


或者:

<think>

因为今天星期三

所以答案是北京

</think>

逻辑混乱。


这些数据必须删除。


过滤流程

graph TD

A[原始生成数据]

--> B[格式检查]

--> C[正确性检查]

--> D[推理检查]

--> E[保留高质量样本]

LLM作为过滤器

现代训练中经常使用:

LLM as a Judge

即:

让一个更强模型评价较弱模型。


例如:

GPT-4
Claude
DeepSeek-V3

担任评审。


评分维度:

正确性
逻辑性
格式规范
推理质量
可读性

第三步:转换(Transformation)

即使答案正确。

格式也未必适合训练。

因此需要转换。


例如:

原始数据:

问题:
苹果有几个?

答案:
5

转换后:

<user>
苹果有几个?
</user>

<assistant>
5
</assistant>

常见转换

对话格式

Question → Chat

CoT格式

Answer
↓
Think + Answer

风格转换

正式
↓
口语化

长度扩展

一句话
↓
详细解释

数据转换流程

graph LR

A[Raw Data]

--> B[Format Transform]

--> C[Style Transform]

--> D[Training Data]

第四步:评分(Scoring)

最后一步:

质量评分。


评分维度通常包括:

指标 含义
Correctness 是否正确
Reasoning 推理质量
Helpfulness 是否有帮助
Safety 是否安全
Format 是否符合格式
Length 长度是否合理

例如:

Correctness = 9
Reasoning = 8
Format = 10

综合:

Score = 9.0

合成数据完整流程

graph TD

A[Template]

--> B[Generate]

--> C[Filter]

--> D[Transform]

--> E[Score]

--> F[Training Data]

Constitutional AI(宪法AI)

Anthropic 提出了著名的:

Constitutional AI

核心思想:

不依赖大量人工反馈,而是让AI根据一套规则自我监督。


第一阶段:基于宪法的SFT

首先由专家制定:

Constitution

即:


例如:

不要鼓励违法行为

不要泄露隐私

保持诚实

流程:

graph TD

A[编写宪法]

--> B[基础模型生成回答]

--> C[AI批判回答]

--> D[AI修正回答]

--> E[SFT训练]

--> F[Fine-tuned Model]

第二阶段:RLAIF

RLAIF:

Reinforcement Learning from AI Feedback

即:

AI反馈强化学习。


不再依赖人工排序。

而是:

AI自己比较。


流程:

graph TD

A[Prompt]

--> B[生成回答A]

A --> C[生成回答B]

B --> D[AI评审]

C --> D

D --> E[Preference Data]

E --> F[Reward Model]

F --> G[RL训练]

G --> H[Aligned Model]

数据比例的重要性

很多训练失败原因:

不是数据太少。

而是:

数据配比错误

一个错误案例

训练:

90% 编程

10% 其它

结果:

代码能力很强

但:

聊天能力下降

能力遗忘问题

例如:

微积分助手。

训练后:

微积分:95分

但是:

历史:20分
写作:10分
聊天:0分

这称为:

Catastrophic Forgetting
灾难性遗忘

一个更合理的数据比例

例如通用助手:

类型 比例
通用对话 60%
专业任务 30%
安全数据 10%

注意:

这只是经验值。

并不存在万能比例。


如何确定比例

最佳实践:

graph TD

A[小规模训练]

--> B[评估]

--> C[误差分析]

--> D[调整比例]

D --> E[重新训练]

而不是:

一次训练100万条

奖励函数也需要平衡

奖励并不是单一指标。

通常是多个目标组合。

例如:

Reward

=
0.4 × Helpfulness
+
0.4 × Safety
+
0.2 × Truthfulness

奖励冲突问题

模型经常面临:

简洁
VS
完整

例如:

回答:

是。

很简洁。

但毫无帮助。


回答:

5000字长文

很完整。

但用户不想看。


因此需要:

奖励上限
长度约束
多目标优化

共同控制。


训练通用能力还是专业能力?

这是所有后训练项目都会面对的问题:

能力增强
VS
能力保留

例如:

训练一个微积分模型。

目标:

微积分能力 ↑

但同时希望:

聊天能力保留
数学其它领域保留
代码能力保留

因此现代训练通常采用:

graph TD

A[专业数据]

--> C[混合训练]

B[通用数据]

--> C

C --> D[评估]

D --> E[能力保持检查]

总结

合成数据已经成为现代大模型训练的核心基础设施。

完整流程通常为:

Generate
→ Filter
→ Transform
→ Score
→ Train

而在模型对齐中,Anthropic 的 Constitutional AI 和 RLAIF 展示了一条重要路线:

用 AI 生成数据、AI 评审数据、AI 训练奖励模型,再通过 RL 完成对齐。

最终决定模型质量的往往不是数据量,而是:

数据质量、数据配比、奖励设计以及是否保留原有通用能力。